#include <stdio.h>
#include <stdint.h>
#include <malloc.h>
#include <stdlib.h>  
#include <time.h>
#include <unistd.h>
#include <stdbool.h>
#define MAX_MAP 15	// 地图长宽

// 字体颜色 黄 蓝 白
#ifdef _WIN32
#include <windows.h>
int Color[3] = {(FOREGROUND_RED | FOREGROUND_GREEN), (FOREGROUND_BLUE | FOREGROUND_GREEN), 7};
#define CLEAR_SCREEN "cls"
#else
char* Color[3] = {"\x1b[33m", "\x1b[36m", "\x1b[0m"};
#define CLEAR_SCREEN "clear"
#endif

typedef int8_t Coord; // 坐标类型

typedef enum {
	UP ,LEFT, DOWN, RIGHT, SKY, BEAN 
}Map;

void test();											// 测试
void gameOpen(); 										// 开始游戏
bool gameOver(); 										// 游戏结束

Coord randCoord(bool isX); 								// 生成随机坐标
Map getTurnDir(Map main_dir, Map turn);					//获取左转或右转后对应方向
void turnToCoord(Coord *x, Coord *y, Map dir);			// 根据方向获取下一步坐标
bool isWall(Coord x, Coord y);
bool isBody(Coord x, Coord y);

void initSnake(); 										// 初始化蛇
bool moveSnake(); 										// 移动蛇
void moveBody(Coord dad_x, Coord dad_y);				// 移动蛇身体

void createBean(); 										// 生成豆子

void showMap(); 										// 映射地图 
void printSnake(int x, int y); 							// 打印蛇
void printBean(); 										// 打印豆子

// 4.0
void getNextDir();										// 获取下一步行进方向
void getBeanWall();										// 获取豆子更靠近的墙面
void moveSSS();											// 根据条件判断蛇的行进方向

// 4.1 修复了在返回墙时吃到豆子会自寻死路的bug
// 4.2 修复了在左下角(13,1)会进入死路的bug
// 4.3 解决了在首尾相遇时会乱跑的bug
